<?php
// ------------------------------------------------------------------------
// |@Author       : Jarmin <edshop@qq.com>
// |@----------------------------------------------------------------------
// |@Date         : 2023-05-07 22:55:43
// |@----------------------------------------------------------------------
// |@LastEditTime : 2023-05-30 19:33:51
// |@----------------------------------------------------------------------
// |@LastEditors  : Jarmin <jarmin@ladmin.cn>
// |@----------------------------------------------------------------------
// |@Description  : 
// |@----------------------------------------------------------------------
// |@FilePath     : User.php
// |@----------------------------------------------------------------------
// |@Copyright (c) 2023 http://www.ladmin.cn   All rights reserved. 
// ------------------------------------------------------------------------
namespace app\api\controller;

use think\admin\Controller;

class User extends Controller
{
    /**
     * 用户登录
     * @validate true
     * @return mixed 返回创建结果
     */
    public function token()
    {
        if ($this->request->isPost()) {
            // 调用模型中的 resetUser() 方法进行用户密码重置操作
            $result = $this->modelUser->tokenUser($this->app->request->post());
            
            // 判断操作结果
            if ($result['code'] === 200) {
                return $this->success($result['message'], $result['data']);
            } else {
                return $this->error($result['message']);
            }
        }
    }

    /**
     * 获取用户菜单和所属角色权限信息
     * @return \think\response\Json
     */
    public function getUserMenu()
    {
        if ($this->request->isGet()) {
            // 从请求头部获取 token
            $token = $this->app->request->header('token');

            // 判断 token 是否过期，过期则给出提示并返回空对象
            if (!$token) {
                return $this->error(lang('user.token_expired'), []);
            }
            // 调用模型层获取用户菜单和所属角色权限信息
            $result = $this->modelUser->getUserMenu($token);
            // 如果获取到的用户信息为空数组，则给出提示并返回空对象
            if (empty($result)) {
                return $this->error(lang('user.token_expired'), []);
            }

            return $this->success(lang('user.get_user_menu_success'), $result);
        }
    }

    /**
     * 获取所有用户列表，支持分页
     * @return mixed 返回成功或失败的提示信息以及分页的用户列表
     */
    public function list()
    {
        if ($this->request->isGet()) {
            // 查询用户信息
            $list = $this->modelUser->listUser($this->app->request->param());
            // 构造包含分页信息的返回结果
            $data = [
                'page' => $this->app->request->param('page'),
                'pageSize' => $this->app->request->param('pageSize'),
                'total'=> $list['total'],
                'rows' => $list['data'],
            ];
            return $this->success(lang('user.info_get_success'), $data);
        }
    }

    /**
     * 添加或修改用户信息
     * @validate true
     * @sing true
     * @mixed validate true
     * @return mixed 返回成功或失败的提示信息以及添加或修改后的用户信息
     */
    public function save()
    {
        if ($this->request->isPost()) {
            // 添加或修改用户信息
            $result = $this->modelUser->saveUser($this->app->request->post());
            return $this->success(lang('user.edit_success'),$result);
        }
    }
    
    /**
     * 启用或禁用用户
     * @sing true
     * @return mixed 返回成功或失败的提示信息以及启用或禁用后的用户信息
     */
    public function state()
    {
        if ($this->request->isPut()) {
            $result = $this->modelUser->stateUser($this->app->request->put());
            return $this->success(lang('user.state_success'),$result);
        }
    }

    /**
     * 重置用户密码
     * @validate true
     * @sing true
     * @password validate true
     * @return mixed 返回成功或失败的提示信息以及重置后的用户信息
     */
    public function reset()
    {
        if ($this->request->isPost()) {
            // 调用模型中的 resetUser() 方法进行用户密码重置操作
            $result = $this->modelUser->resetUser($this->app->request->post());
            
            // 判断操作结果
            if ($result['code'] === 200) {
                return $this->success($result['message'], $result['data']);
            } else {
                return $this->error($result['message']);
            }
        }
    }

    /**
     * 根据用户 ID 删除用户及其所有相关信息
     * @validate true
     * @sing true
     * @return mixed 返回成功或失败的提示信息以及删除的用户信息
     */
    public function remove()
    {
        if ($this->request->isDelete()) {
            // 删除用户及其所有相关信息
            $result = $this->modelUser->removeUser($this->app->request->delete());
            return $this->success(lang('user.delete_success'),$result);
        }
    }
}